package org.quincy.netty.test.vo;

import java.util.Map;

import org.quincy.rock.comm.netty.NettyUtil;

import io.netty.buffer.ByteBuf;

/**
 * <b>登录响应报文。</b>
 * <p><b>详细说明：</b></p>
 * <!-- 在此添加详细说明 -->
 * result返回码说明:
 * 1-成功，2-验证失败，3-自动注册失败，4-达到服务器承载限度，请稍后再登录，5-已调度新的服务器，6-校时错误。
 * <p><b>修改列表：</b></p>
 * <table width="100%" cellSpacing=1 cellPadding=3 border=1>
 * <tr bgcolor="#CCCCFF"><td>序号</td><td>作者</td><td>修改日期</td><td>修改内容</td></tr>
 * <!-- 在此添加修改列表，参考第一行内容 -->
 * <tr><td>1</td><td>wks</td><td>2018年5月14日 下午4:41:01</td><td>建立类型</td></tr>
 * 
 * </table>
 * @version 1.0
 * @author wks
 * @since 1.0
 */
public class LoginResultMessage extends BaseMessage {
	/**
	 * serialVersionUID。
	 */
	private static final long serialVersionUID = -5488633107199567763L;

	/**
	 * 如果返回码=1则为服务器代码，如果返回码=5则为新的服务器代码。
	 */
	private String serverNo;
	/**
	 * 如果返回码=1则为服务器唯一地址，如果返回码=5则为新的服务器地址。
	 */
	private String serverAddress;
	/**
	 * 服务器端口号。
	 */
	private int serverPort;
	/**
	 * 校时毫秒数（无论返回码为何值，始终返回服务器校时时间）。
	 */
	private long serverTime;
	/**
	 * 如果返回码=1则为心跳周期，否则为重新登录前需要等待的时间。
	 * 单位(秒)
	 */
	private int heartbeat;
	/**
	 * 数据采集周期(秒)。
	 */
	private int collect;

	/**
	 * <b>获得如果返回码=1则为服务器代码，如果返回码=5则为新的服务器代码。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @return 如果返回码=1则为服务器代码，如果返回码=5则为新的服务器代码
	 */
	public String getServerNo() {
		return serverNo;
	}

	/**
	 * <b>设置如果返回码=1则为服务器代码，如果返回码=5则为新的服务器代码。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。 
	 * @param serverNo 如果返回码=1则为服务器代码，如果返回码=5则为新的服务器代码
	 */
	public void setServerNo(String serverNo) {
		this.serverNo = serverNo;
	}

	/**
	 * <b>获得如果返回码=1则为服务器唯一地址，如果返回码=5则为新的服务器地址。。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @return 如果返回码=1则为服务器唯一地址，如果返回码=5则为新的服务器地址。
	 */
	public String getServerAddress() {
		return serverAddress;
	}

	/**
	 * <b>设置如果返回码=1则为服务器唯一地址，如果返回码=5则为新的服务器地址。。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param serverAddress 如果返回码=1则为服务器唯一地址，如果返回码=5则为新的服务器地址。
	 */
	public void setServerAddress(String serverAddress) {
		this.serverAddress = serverAddress;
	}

	/**
	 * <b>获得服务器端口号。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @return 服务器端口号
	 */
	public int getServerPort() {
		return serverPort;
	}

	/**
	 * <b>设置服务器端口号。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param serverPort 服务器端口号
	 */
	public void setServerPort(int serverPort) {
		this.serverPort = serverPort;
	}

	/**
	 * <b>获得校时毫秒数（无论返回码为何值，始终返回服务器校时时间）。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @return 校时毫秒数（无论返回码为何值，始终返回服务器校时时间）
	 */
	public long getServerTime() {
		return serverTime;
	}

	/**
	 * <b>设置校时毫秒数（无论返回码为何值，始终返回服务器校时时间）。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param serverTime 校时毫秒数（无论返回码为何值，始终返回服务器校时时间）
	 */
	public void setServerTime(long serverTime) {
		this.serverTime = serverTime;
	}

	/**
	 * <b>获得如果返回码=1则为心跳周期，否则为重新登录前需要等待的时间。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @return 如果返回码=1则为心跳周期，否则为重新登录前需要等待的时间
	 */
	public int getHeartbeat() {
		return heartbeat;
	}

	/**
	 * <b>设置如果返回码=1则为心跳周期，否则为重新登录前需要等待的时间。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param heartbeat 如果返回码=1则为心跳周期，否则为重新登录前需要等待的时间
	 */
	public void setHeartbeat(int heartbeat) {
		this.heartbeat = heartbeat;
	}

	/**
	 * <b>获得数据采集周期(秒)。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @return 数据采集周期(秒)
	 */
	public int getCollect() {
		return collect;
	}

	/**
	 * <b>设置数据采集周期(秒)。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param collect 数据采集周期(秒)
	 */
	public void setCollect(int collect) {
		this.collect = collect;
	}

	/** 
	 * toBinary。
	 * @see org.quincy.netty.test.vo.BaseMessage#toBinary(io.netty.buffer.ByteBuf, java.util.Map)
	 */
	@Override
	public ByteBuf toBinary(ByteBuf buf, Map<String, Object> ctx) {
		buf = super.toBinary(buf, ctx);
		buf = NettyUtil.writeChars(buf, this.getServerNo(), 10);
		buf = NettyUtil.writeVarchar(buf, getServerAddress());
		buf = buf.writeInt(getServerPort());
		buf = NettyUtil.writeTimestamp(buf, getServerTime());
		buf = buf.writeInt(getHeartbeat());
		buf = buf.writeInt(getCollect());
		return buf;
	}

	/** 
	 * fromBinary。
	 * @see org.quincy.netty.test.vo.BaseMessage#fromBinary(io.netty.buffer.ByteBuf, java.util.Map)
	 */
	@Override
	public LoginResultMessage fromBinary(ByteBuf buf, Map<String, Object> ctx) {
		super.fromBinary(buf, ctx);
		setServerNo(NettyUtil.readChars(buf, 10));
		setServerAddress(NettyUtil.readVarchar(buf));
		setServerPort(buf.readInt());
		setServerTime(NettyUtil.readTimestamp(buf));
		setHeartbeat(buf.readInt());
		setCollect(buf.readInt());
		return this;
	}
}
